#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

long long app_common_getCurrentTime()
{
    struct timeval tv;
    // 获取当前时间
    gettimeofday(&tv, NULL);

    return (long long )tv.tv_sec * 1000 + tv.tv_usec / 1000;
    // tv_sec: 秒  tv_usec: 微秒
}

char *app_common_charsToHexstr(char *chars, int chars_len)
{
    // abcd -> 61 62 63 64
    //  为要生成的16进制字符串申请内存空间
    char *hex_str = (char *)malloc(chars_len*2 + 1);
    // 遍历chars数组中的每个字符，得到对应的16进制的二个字符，添加到hex_str中
    for (int i = 0; i < chars_len; i++)
    {
        sprintf(hex_str + i * 2, "%02X", chars[i]);
    }
    // 添加字符串结束符
    hex_str[chars_len * 2] = '\0';

    return hex_str;
}

char *app_common_hexstrToChars(char *hexstr, int *chars_len)
{
    // 为要生成的字符数组申请内存空间
    int hex_len = strlen(hexstr);
    *chars_len = hex_len / 2; // 将字符数组的长度保存到chars_len中
    char *chars = (char *)malloc(*chars_len);
    // 61 62 63 64 => abcd   [a ]
    // 以2个为单位遍历hexstr中的每个字符，得到对应的字符，添加到chars中
    for (int i = 0; i < hex_len; i += 2)
    {
        sscanf(hexstr+i, "%2hhX", chars+i/2);
    }

    return chars;
}